import pandas as pd
import numpy as np
from datetime import datetime


def generate_women_fashion_holidays():
    """生成女性衣物专属购物节DataFrame"""
    fashion_holidays = []
    current_year = datetime.now().year

    # 核心女性购物节（强化配置）
    for year in range(current_year - 2, current_year + 3):  # 覆盖5年跨度
        # 1. 女神节/三八节（3月8日） - 女性专属
        fashion_holidays.append(('womens_day', f"{year}-03-08", -7, 3))  # 提前1周预热

        # 2. 春季上新季（3月15日） - 春装上市
        fashion_holidays.append(('spring_new', f"{year}-03-15", -3, 7))

        # 3. 618年中大促（6月18日） - 夏装主力促销
        fashion_holidays.append(('618_summer', f"{year}-06-18", -10, 5))  # 预售+尾款

        # 4. 七夕情人节（农历七月初七） - 礼服/连衣裙热销
        qixi_date = get_qixi_date(year)
        fashion_holidays.append(('qixi', qixi_date.strftime('%Y-%m-%d'), -5, 2))

        # 5. 秋季上新季（9月1日） - 秋装上市
        fashion_holidays.append(('autumn_new', f"{year}-09-01", -3, 7))

        # 6. 双11全球狂欢节（11月11日） - 冬装主力促销
        fashion_holidays.append(('double11_winter', f"{year}-11-11", -15, 7))  # 长预售期

        # 7. 双12（12月12日） - 年末清仓
        fashion_holidays.append(('double12_clearance', f"{year}-12-12", -5, 3))

        # 8. 圣诞节（12月25日） - 派对服装
        fashion_holidays.append(('christmas_party', f"{year}-12-25", -3, 1))

    # 女性专属月活动
    for year in range(current_year - 2, current_year + 3):
        for month in range(1, 13):
            # 每月1日：会员日（专属优惠）
            fashion_holidays.append(('vip_day', f"{year}-{month:02d}-01", 0, 0))

            # 每月8日：女神日（女性品类特惠）
            fashion_holidays.append(('goddess_day', f"{year}-{month:02d}-08", -1, 1))

    # 季节转换促销
    for year in range(current_year - 2, current_year + 3):
        # 换季清仓（季节交替时）
        fashion_holidays.append(('season_clearance', f"{year}-04-10", -2, 7))  # 春转夏
        fashion_holidays.append(('season_clearance', f"{year}-10-10", -2, 7))  # 秋转冬

    # 转换为DataFrame
    df = pd.DataFrame(fashion_holidays,
                      columns=['holiday', 'ds', 'lower_window', 'upper_window'])
    df['ds'] = pd.to_datetime(df['ds'])
    return df


# 辅助函数：获取七夕日期（农历七月初七）
def get_qixi_date(year):
    """获取指定年份的七夕日期（公历）"""
    # 七夕日期映射表（2020-2030）
    qixi_map = {
        2020: '2020-08-25',
        2021: '2021-08-14',
        2022: '2022-08-04',
        2023: '2023-08-22',
        2024: '2024-08-10',
        2025: '2025-08-29'
    }
    return pd.to_datetime(qixi_map.get(year, f"{year}-08-01"))  # 默认值

